package com.cykj.pos.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cykj.common.core.domain.AjaxResult;
import com.cykj.pos.domain.*;
import com.cykj.pos.domain.dto.*;
import com.cykj.pos.domain.vo.BizTransactionAmountEntityVO;
import com.cykj.pos.profit.dto.ActivateReachDTO;
import com.cykj.pos.profit.dto.MerchantInfoDTO;
import com.cykj.pos.profit.dto.TransDataDTO;
import com.cykj.pos.profit.dto.TransactionsDTO;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 商户交易记录Service接口
 *
 * @author ningbingwu
 * @date 2021-01-29
 */
public interface IBizMerchTransactionsService extends IService<BizMerchTransactions> {

    /**
     * 查询列表
     */
    List<BizMerchTransactions> queryList(BizMerchTransactions bizMerchTransactions);

    /**
     * @author: haoran
     * @date: 2022/7/28
     * 方法名称： 所有交易记录列表
     */
    List<BizMerchTransactions> queryLists(BizMerchTransactions bizMerchTransactions);

    /**
     * @author: haoran
     * @date: 2022/7/29
     * 方法名称： 交易记录
     */
    List<BizMerchTransactions> listsPartner1(BizMerchTransactions bizMerchTransactions);

    BizMerchBillTurnoverDTO turnoverlist(BizMerchTransactions bizMerchTransactions);

    List<BizMerchTransactions> listsPartner(BizMerchTransactions bizMerchTransactions);

    List<BizMerchTransactions> listsAsscend(BizMerchTransactions bizMerchTransactions);

    List<BizMerchTransactions> listsReturn(BizMerchTransactions bizMerchTransactions);

    List<BizFeesChargedDTO> tramcBilling(BizFeesChargedDTO bizFeesChargedDTO);

    List<BizProfitDeatail> queryListAlls(String uuId);

    List<CashbackRecordDTO> listReturnAlls(String uuId);

    List<CashbackRecordDTO> listTramcBillingAlls(String uuId);

    StealSwitchDTO listStealSwitch(StealSwitchDTO stealSwitchDTO);

    AscendSwitchDTO listAscendSwitch(AscendSwitchDTO ascendSwitchDTO);

    int stealupdate(StealSwitchDTO stealSwitchDTO);

    int ascendupdate(AscendSwitchDTO ascendSwitchDTO);

    int estimateIsPass(EstimateIsPassDTO estimateIsPassDTO);

    int estimateUpdatePass(EstimateIsPassDTO estimateIsPassDTO);

    List<BizMerchTransactions> listss();

    BizMerchTransactions getErrorCause(Long Id);

    /**
     * 检索商户交易记录-所有的
     *
     * @param merchId
     * @return
     */
    public List<BizMerchTransactions> getMonthlyTransRecordsByMerchId(Long merchId);

    /**
     * 检索商户交易记录-所有的
     *
     * @param caculatePeriod 计算周期
     * @param merchId
     * @return
     */
    public List<BizMerchTransactions> getMonthlyTransRecordsByMerchId(String caculatePeriod, Long merchId);

    /**
     * 检索商户交易记录-分页的
     *
     * @param merchId
     * @param pageNo
     * @param pageSize
     * @return
     */
    public List<BizMerchTransactions> getMonthlyTransRecordsByMerchId(Long merchId, int pageNo, int pageSize);

    /**
     * 检索商户交易记录-分页的
     *
     * @param caculatePeriod 计算周期
     * @param merchId
     * @param pageNo
     * @param pageSize
     * @return
     */
    public List<BizMerchTransactions> getMonthlyTransRecordsByMerchId(String caculatePeriod, Long merchId, int pageNo, int pageSize);

    /**
     * 获取商户月交易金额
     *
     * @param caculatePeriod 计算周期
     * @param merchId
     * @return
     */
    public BigDecimal getMonthlyTransAmountByMerchId(String caculatePeriod, Long merchId);

    /**
     * 获取商户月交易金额  魏建波可以用
     *
     * @param merchId
     * @return
     */
    public BigDecimal getMonthlyTransAmountByMerchId(Long merchId);

    /**
     * 商户本月或上月交易额  魏建波可以用
     *
     * @param merchId
     * @param month   本月或上月
     * @return
     */
    public BigDecimal getMonthlyTransAmountByMerchId(Long merchId, String month);

    /**
     * 小薇商户 交易额个人业绩
     *
     * @param merchId
     * @return
     */
    BigDecimal getMonthlyMerchantTransAmountByMerchId(Long merchId);

    /**
     * 合作伙伴的所有交易额
     *
     * @param merchantId
     * @return
     */
    BigDecimal getTotalTransAmountByMerchId(Long merchantId);

    /**
     * 通过sn_code查询交易笔数
     *
     * @param id
     * @return
     */
    List<BizMerchTransactions> queryDealNum(String id);

    /**
     * 查询当月交易金额
     *
     * @param merchantInfoDTO
     * @return
     */
    BigDecimal queryNowMonthDeal(MerchantInfoDTO merchantInfoDTO);

    /**
     * 查询所有交易金额
     *
     * @param merchantInfoDTO
     * @return
     */
    BigDecimal queryAllMonthDeal(MerchantInfoDTO merchantInfoDTO);

    /**
     * 查询个人业绩
     *
     * @param transPerformanceDTO
     * @return
     */
    List<TransPerformanceDTO> queryMerchantTransactionInfo(TransPerformanceDTO transPerformanceDTO);

    /**
     * 查询团队业绩
     *
     * @param transPerformanceDTO
     * @return
     */
    List<TransPerformanceDTO> queryTeamTransactionInfo(TransPerformanceDTO transPerformanceDTO);

    /**
     * 查询总业绩
     *
     * @param transPerformanceDTO
     * @return
     */
    List<TransPerformanceDTO> queryAllTransactionInfo(TransPerformanceDTO transPerformanceDTO);

    /**
     * 本月按方式 查询交易额
     *
     * @param merchantInfoDTO
     * @return
     */
    TransactionsDTO queryNowMonthDealWay(MerchantInfoDTO merchantInfoDTO);

    /**
     * 按激活时间向前推 看交易量是否达标
     *
     * @param posInfo
     * @return
     */
    List<ActivateReachDTO> queryActivatePosMonthAmount(BizPosMachineStatusRecords posInfo);

    /**
     * 存储pos1.0交易信息
     *
     * @param sy
     * @return
     */
    int insertPosOneTransactionAmount(SynchronizationDataDTO sy);

    List<TransactionRecordDTO> findTransactionRecord(TransactionRecord transactionRecord);

    /**
     * xxl储存偷单交易记录
     *
     * @param sy
     * @return
     */
    int insertbizMerchTransactions(SynchronizationDataDTO sy);

    BigDecimal getCoin(SynchronizationDataDTO sy);

    Integer findTransaction(String posSn, String amount, String hostDate,String transType);

    /**
     * 获取sn所有交易记录
     * @param snCode
     * @return
     */
    List<BizMerchTransactions> selectBizMerchTransactions(String snCode);

    /**
     * 把sn记录换成虚拟的
     * @param snCode
     */
    void updateBizMerchTransactionsBySN(String snCode,String fictitiousSnCode);

    /**
     * 存解绑交易记录表
     * @param list
     * @param merchId
     * @param merchName
     */
    void insertbizMerchTransactionsUnbund(List<BizMerchTransactions> list, Long merchId, String merchName);

    /**
     * 更新偷单代理的钱包
     * @param addi_amount
     * @param userId
     */
    void updateWallet(String addi_amount, Long userId);

    /**
     * 减钱
     * @param addiAmount
     * @param userId
     */
    void subtractionWallet(String addiAmount, Long userId);

    /**
     * 查询交易量和交易笔数
     * @param sn
     * @return
     */
    BizTransactionCountDTO selectCountBizMerchTransactions(String sn);

    BizTransactionCountDTO selectSumCountBizMerchTransactions(String format, String sn);

    List<BizProfitDeatail> selectBizProfitDeatail(String uuid);

    /**
     *  查询相同的交易
     * @param pos_sn
     * @param amnount
     * @param host_date
     * @return
     */
    SynchronizationDataDTO selectTransaction(String pos_sn, String amnount, String host_date);

    /**
     * @author: haoran
     * @date: 2022/8/1
     * 方法名称： 通过uuid查询交易通知表id
     */
    Long selectAndInsertId(String uuid);

    /**
     * @author: haoran
     * @date: 2022/8/1
     * 方法名称： 新增交易流水通知表信息
     */
    void insert(BizTransactionEntity bizTransactionEntity);

    List<TransactionRecordDTO> findTransactionRecordNew(TransactionRecord transactionRecord);

    List<BizTransactionAmountEntityVO> selectBizMerchTransactionsByCode(BizMerchantInfo bizMerchantInfo);
    AjaxResult getOnlineDetail(TransDataDTO transDataDTO);

    Long selectAndInsertIdForClosure(String pos_sn, String amnount, String host_date);

    Date selectLastTransData(String posCode);

    BigDecimal getTransAmount(String merchantNo ,String activeTime, String expireDate);
}
